---
title: SAIF.Business.Claim.Legal architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF Documentation Generator
last_reviewed: 2026-08-21
library: SAIF.Business.Claim.Legal
reference_type: embedded
---

# SAIF.Business.Claim.Legal architecture

`SAIF.Business.Claim.Legal` is the component-tier business/domain class library for legal-case administration in the SAIF Business Object Framework (BOF) stack, sitting below the `LegalMaintenance` ASP.NET WebForms presentation layer and above the Oracle database, and consuming sibling business/view libraries for claim and policy data. It comprises 85 public classes, 52 nested `Friend Class Criteria` types, 1 public module (`mdlCodeTables`), and 5 public enums across three functional folders — `LegalNet\` (legal-case lifecycle), `TableMaint\` (administrative reference data), and `Print\` (letter generation) — plus root-level cached code tables.

## Responsibilities
- Legal-case intake, scheduling/hearings, appeals and brief deadlines, outcomes, notes, costs, consolidation, file creation and acknowledgement (`LegalNet\`: `clsLegalCase`, `clsLegalSchedule`, `clsAppeal`, `clsCaseOutcome`, `clsOutcomeIssue`, `clsOutcomeStaff`, `clsCaseNote`, `clsCaseCost`, `clsCaseSearchCriteria`, `clsCaseSearchResult`, `clsLegalCaseEvaluation`, `clsLegalFileLocation`, `clsConsolidations`, `clsAcknowledge`, `clsMailDate`, `clsCreateFile`, `clsFindCase`, `clsOtherLegalParty`).
- Attorney assignment processing and result tracking, including Outlook/Exchange calendar synchronization (`clsAssignmentProcess`, `clsAssignmentResult`, `clsAttorneyMessages`).
- CRUD over administrative reference data that drives attorney availability and assignment: attorney profiles/schedules/conflicts, policy and worker assignments, hearing locations, other firms, legal persons, out-of-town rotation (`TableMaint\`: `clsAttorneyProfile`, `clsAttorneySchedule`, `clsAttorneyConflict`, `clsAttorneyPolicyAssignment`, `clsAttorneyWorkerAssignment`, `clsHearingLocation` / `clsHearingLocationInfo`, `clsOtherFirm`, `clsLegalPerson`, `clsLegalPersonType`, `clsOutOFTownRotationAssgn`).
- Letter request retrieval, recipient resolution, and XML payload generation for the Xpressions document platform (`Print\`: `clsLetterRequest`, `clsLetterRequestCollection`).
- Cached code-table lookups shared across the library (`mdlCodeTables`, 31 documented code-table classes inheriting `CTB.CodeTable(Of T)` or `CTB.ExtendedCodeMap`).

## Component boundaries
- **`LegalNet\` (root namespace):** transactional legal-case lifecycle business objects and their nested `Friend Class Criteria` types.
- **`TableMaint\` (root namespace):** administrative/reference-data business objects supporting attorney availability and assignment.
- **`Print\` (root namespace):** letter-request generation and Xpressions XML payload construction.
- **`SAIF.Business.Claim.Legal.CodeTables` namespace:** the only explicit `Namespace CodeTables` declaration (`mdlCodeTables.vb`), housing cached code-table lookups.
- **Database boundary:** Oracle only, reached through Criteria-supplied `CreateSQL`/`RetrieveSQL`/`InsertSQL`/`UpdateSQL`/`DeleteSQL` string properties (stored-procedure calls against packages `pk80001_legalnet`, `pk80005_assignment`, `pk82289_legalnet_letters`) and supplemented by application-layer inline SQL via `SqlHelper.ScalarQuery` / `ResultSetQuery` / `NonQuery`.
- **External-service boundary:** Microsoft Exchange/Outlook calendars via `SAIF.Services.Exchange` (`clsAssignmentProcess`, `clsLegalSchedule`, `clsAttorneySchedule`), email notification via the BOF mail framework, and the file system for Xpressions output documents (`xpressionsoutputdocumentspath`).
- **No public interfaces** are introduced by this library; all abstractions (`IBusinessCriteria`, `clsRetrieveOnlyBusinessCriteria`) come from `SAIF.BOF.Framework.*`.
- **No authorization boundary** is implemented here; access control is applied upstream in the web application / framework*.

## Interaction model
- Every business entity follows the SAIF BOF business-object contract: public read/write properties backed by a nested `Friend Class Criteria` (implementing `IBusinessCriteria` directly — 42 classes — or inheriting `clsRetrieveOnlyBusinessCriteria` — 17 classes, 59 total), plus `Create()`/`GetXxx()` shared factory methods, `Save()`, and overridden `AddBusinessRules()`, `Before*`/`After*` data hooks.
- Persistence is predominantly Oracle stored-procedure calls resolved by the Criteria SQL properties; unsupported CRUD operations throw `New ApplicationException(clsConstants.Messages.InvalidSQLProperty)`.
- Validation is declared through the BOF rules engine (`<RuleData>` attributes registered in `AddBusinessRules()`), so it is enforced inside the business layer regardless of caller.
- The library consumes `SAIF.Business.Claim` (`clsClaimData.GetData`) and `SAIF.Business.View.Policy` (`clsPolicyData.GetPolicyData`) for claim and policy data respectively, and declares (but does not use in source) a `ProjectReference` to `SAIF.Services.Appworx`*.
- Attorney assignment (`clsAssignmentProcess`) and schedule/conflict checking (`clsLegalSchedule`, `clsAttorneySchedule`) call out to Exchange/Outlook via `SAIF.Services.Exchange` to synchronize calendar entries alongside Oracle persistence.
- Letter generation (`clsLetterRequest`) resolves recipients, builds an XML payload, and writes it to a configured output path for downstream pickup by the Xpressions document platform.

## Architecture diagram
The following diagram shows high-level component interactions for `SAIF.Business.Claim.Legal`.

```mermaid
flowchart TD
	A[LegalMaintenance WebForms] --> B[SAIF.Business.Claim.Legal]
	B --> C[LegalNet<br>legal case lifecycle]
	B --> D[TableMaint<br>reference data CRUD]
	B --> E[Print<br>letter requests]
	B --> F[mdlCodeTables<br>cached code tables]
	C --> G[BOF DataPortal / SqlHelper]
	D --> G
	E --> G
	F --> G
	G --> H[(Oracle database<br>pk80001_legalnet, pk80005_assignment,<br>pk82289_legalnet_letters)]
	C --> I[SAIF.Services.Exchange<br>Outlook/Exchange calendars]
	B --> J[SAIF.Business.Claim<br>clsClaimData.GetData]
	B --> K[SAIF.Business.View.Policy<br>clsPolicyData.GetPolicyData]
	E --> L[Xpressions document platform<br>file system output]
```

## Sequence diagram
The following diagram shows the primary attorney assignment batch sequence.

```mermaid
sequenceDiagram
	participant Caller
	participant AssignmentProcess as clsAssignmentProcess
	participant Exchange as SAIF.Services.Exchange
	participant DataPortal as BOF DataPortal / SqlHelper
	Caller->>AssignmentProcess: run assignment batch
	AssignmentProcess->>DataPortal: pk80005_assignment.run_assignment / get_assign_results
	DataPortal-->>AssignmentProcess: assignment result rows
	AssignmentProcess->>Exchange: getOutlookFields / calendar_review
	Exchange-->>AssignmentProcess: calendar conflict/availability data
	AssignmentProcess->>DataPortal: persist assignment results
	DataPortal-->>AssignmentProcess: RowsAffected
	AssignmentProcess-->>Caller: assignment results + notifications
```

## Design constraints
- Oracle-only persistence; SQL properties use `:BindVariable` syntax, `SYSDATE`, `NVL`/`DECODE`, and `<SEQ>.NEXTVAL FROM DUAL`/`GetNextSeqNum` conventions across 22 distinct sequences.
- Unsupported CRUD paths on Criteria classes throw `ApplicationException(clsConstants.Messages.InvalidSQLProperty)` rather than silently no-op, per the SQL property counts (`CreateSQL` 13/29, `RetrieveSQL` 25/17, `InsertSQL` 25/17, `UpdateSQL` 28/14, `DeleteSQL` 22/20 populated/not-supported).
- No authorization enforcement exists in this library; the only security-related import (`SAIF.Framework.Security`, 3 files) is used solely for user-identity attribution on notes/audits/Outlook updates, not access decisions*.
- Non-production environments redirect mailbox/calendar operations via `GetApplicationEnvironment() <> ApplicationEnvironment.Prod` checks in `clsConsolidations`, `clsLegalSchedule`, and `clsAttorneySchedule`.
- `clsProperties.XMLPath` (Exchange configuration XML path), consumed by `clsAssignmentProcess`, is defined outside this repository and its configuration source could not be verified**.
- The `SAIF.Services.Appworx` `ProjectReference` has no code usage found in this library and may be a stale reference retained only for build ordering*.
- The database schema, portal/connection identifiers, and Oracle instance targeted at runtime cannot be determined from source**.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- `SAIF.Business.Claim.Legal\SAIF.Business.Claim.Legal.vbproj`
- `SAIF.Business.Claim.Legal/mdlCodeTables.vb`
- `SAIF.Business.Claim.Legal/LegalNet/clsLegalCase.vb`
- `SAIF.Business.Claim.Legal/LegalNet/clsLegalSchedule.vb`
- `SAIF.Business.Claim.Legal/LegalNet/clsAssignmentProcess.vb`
- `SAIF.Business.Claim.Legal/LegalNet/clsCaseSearchCriteria.vb`
- `SAIF.Business.Claim.Legal/app.config`
- `SAIF.Business.Claim.Legal/Web.config`
- `SAIF.Business.Claim.Legal/My Project/Settings.Designer.vb`
- `LegalMaintenance/Web.config`
